home *** CD-ROM | disk | FTP | other *** search
- /***********************************************************************/
- /* Power-Pipe: This is a Pipe-Filter similar like SORT / FIND / MORE */
- /***********************************************************************/
- /*type info.doc|dict >info.dct ;Sort A...Z and kill worddublettes*/
- /*type info.doc|dict /R >info.dct ;Sort Z...A and kill worddublettes*/
- /*type info.doc|dict ! ! >info.txt ;Extract raw Text for WindowsWrite*/
- /* DICT is very usefull if you want extract Dictionarys from Textfiles */
-
-
- #include <string.h>
- #include <stdio.h>
- #include <alloc.h>
-
-
- char Puffer[80];
- char April[80];
- char Ktipa[80];
- int ASCIItable[256];
- char huge *Zeiger;
- char huge *Zeiger2;
- char huge *ZeigerK;
- char huge *ZeigerS;
- unsigned long Frei;
- unsigned long gross,z,y;
- int a,b,t,i,l;
- int stp;
-
-
-
-
- int isnotletter(int c)
- {
- if((c>='a')&&(c<='z')) return 0;
- if((c>='A')&&(c<='Z')) return 0;
- if(c==39) return 0;
- if(c=='ß')return 0;
- if((c>=128)&&(c<=165)) return 0;
- return 1;
- }
-
-
-
- int main(int argc)
- {
- Frei=farcoreleft()-5000;
- Zeiger2= (char huge *) farmalloc(Frei);
- Zeiger=Zeiger2;
- Frei=Frei-2;
-
- for(t=0;t<256;t++)ASCIItable[t]=t;
- ASCIItable['A']=1;
- ASCIItable['a']=1;
- ASCIItable['Ä']=2;
- ASCIItable['ä']=2;
- ASCIItable['Ö']=17;
- ASCIItable['ö']=17;
- ASCIItable['Ü']=24;
- ASCIItable['ü']=24;
- ASCIItable['ß']=30;
- for(t='B';t<='O';t++)ASCIItable[t]=t-63;
- for(t='P';t<='U';t++)ASCIItable[t]=t-62;
- for(t='V';t<='Z';t++)ASCIItable[t]=t-61;
- for(t='b';t<='o';t++)ASCIItable[t]=t-95;
- for(t='p';t<='u';t++)ASCIItable[t]=t-94;
- for(t='v';t<='z';t++)ASCIItable[t]=t-93;
- l=2*argc-3;
- if(l>1)l=-1;
-
- a=0;
- for(gross=0;gross<Frei;gross++)
- {
- stp=fgetc(stdin);
- if(stp<0) break;
- i=isnotletter(stp);
- if(!i)a=0;
- if(i&a) {a=0; while(isnotletter(stp)){stp=fgetc(stdin); if(stp<0)break;} }
- if(stp<0) break;
- if(isnotletter(stp)) stp=0,a=1;
- *(Zeiger)=(char)stp;
- Zeiger=Zeiger+1;
- }
- if(gross==Frei)return 1;
- *(Zeiger)=0;
- gross++;
- Ktipa[1]=1;
- Ktipa[0]=0;
- April[0]=0;
-
- loop:
- Zeiger=Zeiger2;
- ZeigerS=Zeiger;
- ZeigerK=Zeiger;
- a=0,y=0,i=0;
- if(l<0)i=255;
- for(t=0;t<79;t++)April[t]=i;
- April[79]=0;
- for(z=0;z<gross;z++)
- {
- b=*(Zeiger);
- Zeiger=Zeiger+1;
- if((a|b)==0)continue;
- Puffer[a]=b;
- a++;
- if(a>77) {t=0,a=0; while(*(ZeigerS+t)!=0)*(ZeigerS+t)=0,t++; continue;}
- if(a==1) ZeigerS=Zeiger-1;
- if(b==0)
- {
- for(i=0;i<a;i++) if(ASCIItable[Puffer[i]]!=ASCIItable[Ktipa[i]])break;
- if(i==a){t=0,a=0; while(*(ZeigerS+t)!=0)*(ZeigerS+t)=0,t++; continue;}
- for(i=0;i<a;i++)if((t=ASCIItable[Puffer[i]]-ASCIItable[April[i]])!=0)break;
- if(t*l>0) { y++; ZeigerK=ZeigerS; strcpy(April,Puffer); }
- if (argc>2) break;
- a=0;
- }
- }
- if(y>0)
- {
- t=0;
- while(*(ZeigerK+t)!=0)*(ZeigerK+t)=0,t++;
- t=fputs(April,stdout); if(t<0) return 2;
- if(argc>2) t=fputs(" ",stdout);
- if(argc<=2) { strcpy(Ktipa,April); t=fputs("\n",stdout); }
- if(t<0) return 2;
- }
- if(y>0) goto loop;
-
- farfree(Zeiger2);
- return 0;
- }